// Copyright 2023 mjbots Robotic Systems, LLC.  info@mjbots.com
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include "utils/calibrate.h"

#include <boost/test/auto_unit_test.hpp>

BOOST_AUTO_TEST_CASE(ParseFileTest, *boost::unit_test::tolerance(1e-3)) {
  const auto result = moteus::tool::detail::ParseFile({
      "CAL start",
          "1 1300 1 i1=323 i2=-1235 i3=4321",
          "1 1302 2 i1=4 i2=5 i3=6",
          "2 23 4 i1=5 i2=6 i3=8",
          "CAL done",
          });

  BOOST_TEST(result.phase_up.size() == 2);
  BOOST_TEST(result.phase_up.at(0).phase == 1300);
  BOOST_TEST(result.phase_up.at(0).encoder == 1);
  BOOST_TEST(result.phase_up.at(0).i1 == 0.323);
  BOOST_TEST(result.phase_up.at(0).i2 == -1.235);
  BOOST_TEST(result.phase_up.at(0).i3 == 4.321);
  BOOST_TEST(result.phase_up.at(1).phase == 1302);
  BOOST_TEST(result.phase_up.at(1).encoder == 2);
  BOOST_TEST(result.phase_up.at(1).i1 == 0.004);
  BOOST_TEST(result.phase_up.at(1).i2 == 0.005);
  BOOST_TEST(result.phase_up.at(1).i3 == 0.006);

  BOOST_TEST(result.phase_down.size() == 1);
  BOOST_TEST(result.phase_down.at(0).phase == 23);
  BOOST_TEST(result.phase_down.at(0).encoder == 4);
  BOOST_TEST(result.phase_down.at(0).i1 == 0.005);
  BOOST_TEST(result.phase_down.at(0).i2 == 0.006);
  BOOST_TEST(result.phase_down.at(0).i3 == 0.008);
}

BOOST_AUTO_TEST_CASE(CalibrateTest, *boost::unit_test::tolerance(1e-3)) {
  std::vector<std::string> data = {
    "CAL start",
    "1 1300 35332",
    "1 2600 35372",
    "1 3900 35416",
    "1 5200 35460",
    "1 6500 35484",
    "1 7800 35520",
    "1 9100 35596",
    "1 10400 35656",
    "1 11700 35728",
    "1 13000 35880",
    "1 14300 35928",
    "1 15600 35956",
    "1 16900 35968",
    "1 18200 35996",
    "1 19500 36080",
    "1 20800 36140",
    "1 22100 36220",
    "1 23400 36384",
    "1 24700 36420",
    "1 26000 36476",
    "1 27300 36500",
    "1 28600 36520",
    "1 29900 36580",
    "1 31200 36648",
    "1 32500 36720",
    "1 33800 36820",
    "1 35100 36956",
    "1 36400 37024",
    "1 37700 37072",
    "1 39000 37084",
    "1 40300 37116",
    "1 41600 37172",
    "1 42900 37224",
    "1 44200 37296",
    "1 45500 37456",
    "1 46800 37512",
    "1 48100 37556",
    "1 49400 37572",
    "1 50700 37604",
    "1 52000 37656",
    "1 53300 37716",
    "1 54600 37776",
    "1 55900 37872",
    "1 57200 38000",
    "1 58500 38056",
    "1 59800 38092",
    "1 61100 38128",
    "1 62400 38176",
    "1 63700 38232",
    "1 65000 38280",
    "1 764 38360",
    "1 2064 38496",
    "1 3364 38540",
    "1 4664 38592",
    "1 5964 38608",
    "1 7264 38636",
    "1 8564 38728",
    "1 9864 38792",
    "1 11164 38860",
    "1 12464 39008",
    "1 13764 39064",
    "1 15064 39096",
    "1 16364 39100",
    "1 17664 39132",
    "1 18964 39188",
    "1 20264 39264",
    "1 21564 39324",
    "1 22864 39432",
    "1 24164 39548",
    "1 25464 39584",
    "1 26764 39624",
    "1 28064 39644",
    "1 29364 39668",
    "1 30664 39776",
    "1 31964 39824",
    "1 33264 39924",
    "1 34564 40064",
    "1 35864 40124",
    "1 37164 40144",
    "1 38464 40148",
    "1 39764 40192",
    "1 41064 40268",
    "1 42364 40332",
    "1 43664 40384",
    "1 44964 40512",
    "1 46264 40604",
    "1 47564 40672",
    "1 48864 40712",
    "1 50164 40732",
    "1 51464 40784",
    "1 52764 40836",
    "1 54064 40888",
    "1 55364 40956",
    "1 56664 41100",
    "1 57964 41152",
    "1 59264 41204",
    "1 60564 41232",
    "1 61864 41260",
    "1 63164 41328",
    "1 64464 41372",
    "1 228 41436",
    "1 1528 41572",
    "1 2828 41664",
    "1 4128 41720",
    "1 5428 41752",
    "1 6728 41780",
    "1 8028 41820",
    "1 9328 41868",
    "1 10628 41916",
    "1 11928 42016",
    "1 13228 42132",
    "1 14528 42196",
    "1 15828 42224",
    "1 17128 42240",
    "1 18428 42280",
    "1 19728 42372",
    "1 21028 42412",
    "1 22328 42512",
    "1 23628 42652",
    "1 24928 42692",
    "1 26228 42728",
    "1 27528 42760",
    "1 28828 42792",
    "1 30128 42860",
    "1 31428 42920",
    "1 32728 42992",
    "1 34028 43148",
    "1 35328 43200",
    "1 36628 43252",
    "1 37928 43256",
    "1 39228 43296",
    "1 40528 43340",
    "1 41828 43420",
    "1 43128 43476",
    "1 44428 43588",
    "1 45728 43700",
    "1 47028 43748",
    "1 48328 43784",
    "1 49628 43808",
    "1 50928 43816",
    "1 52228 43892",
    "1 53528 43960",
    "1 54828 44020",
    "1 56128 44156",
    "1 57428 44252",
    "1 58728 44320",
    "1 60028 44348",
    "1 61328 44376",
    "1 62628 44412",
    "1 63928 44464",
    "1 65228 44524",
    "1 992 44624",
    "1 2292 44736",
    "1 3592 44792",
    "1 4892 44840",
    "1 6192 44864",
    "1 7492 44904",
    "1 8792 44956",
    "1 10092 45000",
    "1 11392 45068",
    "1 12692 45216",
    "1 13992 45296",
    "1 15292 45332",
    "1 16592 45344",
    "1 17892 45388",
    "1 19192 45452",
    "1 20492 45508",
    "1 21792 45548",
    "1 23092 45660",
    "1 24392 45768",
    "1 25692 45828",
    "1 26992 45852",
    "1 28292 45876",
    "1 29592 45944",
    "1 30892 46020",
    "1 32192 46080",
    "1 33492 46208",
    "1 34792 46280",
    "1 36092 46336",
    "1 37392 46368",
    "1 38692 46388",
    "1 39992 46448",
    "1 41292 46508",
    "1 42592 46564",
    "1 43892 46620",
    "1 45192 46776",
    "1 46492 46840",
    "1 47792 46868",
    "1 49092 46880",
    "1 50392 46908",
    "1 51692 46952",
    "1 52992 47048",
    "1 54292 47124",
    "1 55592 47236",
    "1 56892 47316",
    "1 58192 47380",
    "1 59492 47416",
    "1 60792 47416",
    "1 62092 47480",
    "1 63392 47540",
    "1 64692 47600",
    "1 456 47680",
    "1 1756 47832",
    "1 3056 47896",
    "1 4356 47964",
    "1 5656 48000",
    "1 6956 48024",
    "1 8256 48044",
    "1 9556 48108",
    "1 10856 48152",
    "1 12156 48240",
    "1 13456 48380",
    "1 14756 48432",
    "1 16056 48448",
    "1 17356 48472",
    "1 18656 48532",
    "1 19956 48592",
    "1 21256 48640",
    "1 22556 48708",
    "1 23856 48860",
    "1 25156 48932",
    "1 26456 48968",
    "1 27756 49024",
    "1 29056 49048",
    "1 30356 49096",
    "1 31656 49140",
    "1 32956 49216",
    "1 34256 49364",
    "1 35556 49416",
    "1 36856 49468",
    "1 38156 49492",
    "1 39456 49520",
    "1 40756 49596",
    "1 42056 49660",
    "1 43356 49704",
    "1 44656 49844",
    "1 45956 49916",
    "1 47256 49964",
    "1 48556 49988",
    "1 49856 50024",
    "1 51156 50052",
    "1 52456 50140",
    "1 53756 50192",
    "1 55056 50264",
    "1 56356 50416",
    "1 57656 50464",
    "1 58956 50504",
    "1 60256 50512",
    "1 61556 50544",
    "1 62856 50628",
    "1 64156 50700",
    "1 65456 50768",
    "1 1220 50908",
    "1 2520 50968",
    "1 3820 51012",
    "1 5120 51048",
    "1 6420 51076",
    "1 7720 51116",
    "1 9020 51184",
    "1 10320 51232",
    "1 11620 51296",
    "1 12920 51464",
    "1 14220 51532",
    "1 15520 51572",
    "1 16820 51588",
    "1 18120 51644",
    "1 19420 51688",
    "1 20720 51728",
    "1 22020 51796",
    "1 23320 51932",
    "1 24620 52008",
    "1 25920 52068",
    "1 27220 52100",
    "1 28520 52136",
    "1 29820 52180",
    "1 31120 52240",
    "1 32420 52292",
    "1 33720 52372",
    "1 35020 52524",
    "1 36320 52580",
    "1 37620 52616",
    "1 38920 52644",
    "1 40220 52704",
    "1 41520 52740",
    "1 42820 52792",
    "1 44120 52856",
    "1 45420 53016",
    "1 46720 53044",
    "1 48020 53104",
    "1 49320 53128",
    "1 50620 53128",
    "1 51920 53212",
    "1 53220 53288",
    "1 54520 53364",
    "1 55820 53508",
    "1 57120 53560",
    "1 58420 53600",
    "1 59720 53632",
    "1 61020 53640",
    "1 62320 53692",
    "1 63620 53780",
    "1 64920 53836",
    "1 684 53920",
    "1 1984 54052",
    "1 3284 54112",
    "1 4584 54136",
    "1 5884 54168",
    "1 7184 54184",
    "1 8484 54268",
    "1 9784 54328",
    "1 11084 54404",
    "1 12384 54544",
    "1 13684 54616",
    "1 14984 54648",
    "1 16284 54660",
    "1 17584 54676",
    "1 18884 54732",
    "1 20184 54812",
    "1 21484 54860",
    "1 22784 54944",
    "1 24084 55116",
    "1 25384 55172",
    "1 26684 55224",
    "1 27984 55260",
    "1 29284 55296",
    "1 30584 55332",
    "1 31884 55392",
    "1 33184 55452",
    "1 34484 55616",
    "1 35784 55660",
    "1 37084 55704",
    "1 38384 55732",
    "1 39684 55768",
    "1 40984 55828",
    "1 42284 55888",
    "1 43584 55940",
    "1 44884 56040",
    "1 46184 56160",
    "1 47484 56208",
    "1 48784 56244",
    "1 50084 56268",
    "1 51384 56304",
    "1 52684 56384",
    "1 53984 56428",
    "1 55284 56496",
    "1 56584 56644",
    "1 57884 56692",
    "1 59184 56732",
    "1 60484 56744",
    "1 61784 56776",
    "1 63084 56872",
    "1 64384 56944",
    "1 148 57008",
    "1 1448 57160",
    "1 2748 57204",
    "1 4048 57256",
    "1 5348 57260",
    "1 6648 57296",
    "1 7948 57352",
    "1 9248 57424",
    "1 10548 57472",
    "1 11848 57560",
    "1 13148 57696",
    "1 14448 57744",
    "1 15748 57768",
    "1 17048 57784",
    "1 18348 57820",
    "1 19648 57900",
    "1 20948 57964",
    "1 22248 58040",
    "1 23548 58208",
    "1 24848 58264",
    "1 26148 58296",
    "1 27448 58308",
    "1 28748 58336",
    "1 30048 58400",
    "1 31348 58480",
    "1 32648 58540",
    "1 33948 58644",
    "1 35248 58772",
    "1 36548 58840",
    "1 37848 58856",
    "1 39148 58900",
    "1 40448 58944",
    "1 41748 58988",
    "1 43048 59032",
    "1 44348 59100",
    "1 45648 59260",
    "1 46948 59304",
    "1 48248 59348",
    "1 49548 59384",
    "1 50848 59400",
    "1 52148 59472",
    "1 53448 59524",
    "1 54748 59576",
    "1 56048 59692",
    "1 57348 59800",
    "1 58648 59860",
    "1 59948 59880",
    "1 61248 59896",
    "1 62548 59972",
    "1 63848 60028",
    "1 65148 60076",
    "1 912 60172",
    "1 2212 60288",
    "1 3512 60336",
    "1 4812 60388",
    "1 6112 60404",
    "1 7412 60432",
    "1 8712 60532",
    "1 10012 60592",
    "1 11312 60640",
    "1 12612 60800",
    "1 13912 60860",
    "1 15212 60900",
    "1 16512 60904",
    "1 17812 60932",
    "1 19112 60988",
    "1 20412 61064",
    "1 21712 61132",
    "1 23012 61244",
    "1 24312 61356",
    "1 25612 61400",
    "1 26912 61420",
    "1 28212 61436",
    "1 29512 61476",
    "1 30812 61584",
    "1 32112 61648",
    "1 33412 61740",
    "1 34712 61876",
    "1 36012 61928",
    "1 37312 61948",
    "1 38612 61964",
    "1 39912 62008",
    "1 41212 62088",
    "1 42512 62136",
    "1 43812 62200",
    "1 45112 62324",
    "1 46412 62416",
    "1 47712 62468",
    "1 49012 62508",
    "1 50312 62524",
    "1 51612 62564",
    "1 52912 62628",
    "1 54212 62684",
    "1 55512 62764",
    "1 56812 62912",
    "1 58112 62964",
    "1 59412 63004",
    "1 60712 63020",
    "1 62012 63072",
    "1 63312 63128",
    "1 64612 63184",
    "1 376 63236",
    "1 1676 63392",
    "1 2976 63468",
    "1 4276 63508",
    "1 5576 63552",
    "1 6876 63584",
    "1 8176 63644",
    "1 9476 63704",
    "1 10776 63744",
    "1 12076 63844",
    "1 13376 63940",
    "1 14676 64004",
    "1 15976 64032",
    "1 17276 64048",
    "1 18576 64076",
    "1 19876 64180",
    "1 21176 64236",
    "1 22476 64328",
    "1 23776 64468",
    "1 25076 64520",
    "1 26376 64564",
    "1 27676 64580",
    "1 28976 64600",
    "1 30276 64676",
    "1 31576 64760",
    "1 32876 64816",
    "1 34176 64976",
    "1 35476 65032",
    "1 36776 65072",
    "1 38076 65072",
    "1 39376 65116",
    "1 40676 65160",
    "1 41976 65248",
    "1 43276 65308",
    "1 44576 65412",
    "1 45876 65520",
    "1 47176 24",
    "1 48476 68",
    "1 49776 96",
    "1 51076 104",
    "1 52376 192",
    "1 53676 244",
    "1 54976 316",
    "1 56276 456",
    "1 57576 536",
    "1 58876 600",
    "1 60176 616",
    "1 61476 680",
    "1 62776 720",
    "1 64076 780",
    "1 65376 824",
    "1 1140 916",
    "1 2440 1052",
    "1 3740 1100",
    "1 5040 1128",
    "1 6340 1156",
    "1 7640 1196",
    "1 8940 1264",
    "1 10240 1312",
    "1 11540 1368",
    "1 12840 1528",
    "1 14140 1592",
    "1 15440 1636",
    "1 16740 1656",
    "1 18040 1704",
    "1 19340 1768",
    "1 20640 1820",
    "1 21940 1868",
    "1 23240 1976",
    "1 24540 2092",
    "1 25840 2144",
    "1 27140 2152",
    "1 28440 2172",
    "1 29740 2216",
    "1 31040 2328",
    "1 32340 2384",
    "1 33640 2516",
    "1 34940 2608",
    "1 36240 2652",
    "1 37540 2664",
    "1 38840 2692",
    "1 40140 2720",
    "1 41440 2812",
    "1 42740 2884",
    "1 44040 2936",
    "1 45340 3076",
    "1 46640 3136",
    "1 47940 3172",
    "1 49240 3188",
    "1 50540 3208",
    "1 51840 3252",
    "1 53140 3364",
    "1 54440 3416",
    "1 55740 3540",
    "1 57040 3648",
    "1 58340 3700",
    "1 59640 3716",
    "1 60940 3732",
    "1 62240 3764",
    "1 63540 3852",
    "1 64840 3920",
    "1 604 3988",
    "1 1904 4152",
    "1 3204 4192",
    "1 4504 4260",
    "1 5804 4300",
    "1 7104 4320",
    "1 8404 4372",
    "1 9704 4424",
    "1 11004 4480",
    "1 12304 4568",
    "1 13604 4676",
    "1 14904 4736",
    "1 16204 4760",
    "1 17504 4764",
    "1 18804 4820",
    "1 20104 4908",
    "1 21404 4964",
    "1 22704 5020",
    "1 24004 5180",
    "1 25304 5252",
    "1 26604 5288",
    "1 27904 5324",
    "1 29204 5360",
    "1 30504 5424",
    "1 31804 5460",
    "1 33104 5532",
    "1 34404 5684",
    "1 35704 5752",
    "1 37004 5784",
    "1 38304 5812",
    "1 39604 5820",
    "1 40904 5896",
    "1 42204 5972",
    "1 43504 6044",
    "1 44804 6168",
    "1 46104 6240",
    "1 47404 6284",
    "1 48704 6300",
    "1 50004 6316",
    "1 51304 6352",
    "1 52604 6448",
    "1 53904 6504",
    "1 55204 6588",
    "1 56504 6732",
    "1 57804 6788",
    "1 59104 6816",
    "1 60404 6808",
    "1 61704 6856",
    "1 63004 6932",
    "1 64304 7012",
    "1 68 7072",
    "1 1368 7228",
    "1 2668 7288",
    "1 3968 7336",
    "1 5268 7364",
    "1 6568 7372",
    "1 7868 7408",
    "1 9168 7496",
    "1 10468 7544",
    "1 11768 7600",
    "1 13068 7788",
    "1 14368 7832",
    "1 15668 7880",
    "1 16968 7900",
    "1 18268 7940",
    "1 19568 7984",
    "1 20868 8052",
    "1 22168 8108",
    "1 23468 8236",
    "1 24768 8320",
    "1 26068 8364",
    "1 27368 8404",
    "1 28668 8424",
    "1 29968 8488",
    "1 31268 8556",
    "1 32568 8596",
    "1 33868 8692",
    "1 35168 8824",
    "1 36468 8876",
    "1 37768 8908",
    "1 39068 8952",
    "1 40368 8984",
    "1 41668 9032",
    "1 42968 9100",
    "1 44268 9160",
    "1 45568 9304",
    "1 46868 9356",
    "1 48168 9384",
    "1 49468 9416",
    "1 50768 9428",
    "1 52068 9512",
    "1 53368 9588",
    "1 54668 9668",
    "1 55968 9800",
    "1 57268 9856",
    "1 58568 9896",
    "1 59868 9912",
    "1 61168 9936",
    "1 62468 9988",
    "1 63768 10076",
    "1 65068 10144",
    "1 832 10216",
    "1 2132 10352",
    "1 3432 10396",
    "1 4732 10420",
    "1 6032 10456",
    "1 7332 10480",
    "1 8632 10560",
    "1 9932 10620",
    "1 11232 10684",
    "1 12532 10840",
    "1 13832 10900",
    "1 15132 10944",
    "1 16432 10948",
    "1 17732 10976",
    "1 19032 11024",
    "1 20332 11104",
    "1 21632 11172",
    "1 22932 11244",
    "1 24232 11396",
    "1 25532 11456",
    "1 26832 11500",
    "1 28132 11548",
    "1 29432 11560",
    "1 30732 11616",
    "1 32032 11672",
    "1 33332 11728",
    "1 34632 11908",
    "1 35932 11964",
    "1 37232 11988",
    "1 38532 12012",
    "1 39832 12064",
    "1 41132 12116",
    "1 42432 12160",
    "1 43732 12208",
    "1 45032 12324",
    "1 46332 12440",
    "1 47632 12492",
    "1 48932 12524",
    "1 50232 12548",
    "1 51532 12600",
    "1 52832 12648",
    "1 54132 12704",
    "1 55432 12780",
    "1 56732 12920",
    "1 58032 12976",
    "1 59332 13008",
    "1 60632 13032",
    "1 61932 13060",
    "1 63232 13148",
    "1 64532 13216",
    "1 296 13288",
    "1 1596 13428",
    "1 2896 13484",
    "1 4196 13520",
    "1 5496 13544",
    "1 6796 13576",
    "1 8096 13628",
    "1 9396 13680",
    "1 10696 13752",
    "1 11996 13844",
    "1 13296 13968",
    "1 14596 14012",
    "1 15896 14036",
    "1 17196 14040",
    "1 18496 14076",
    "1 19796 14184",
    "1 21096 14244",
    "1 22396 14316",
    "1 23696 14472",
    "1 24996 14520",
    "1 26296 14560",
    "1 27596 14580",
    "1 28896 14596",
    "1 30196 14668",
    "1 31496 14748",
    "1 32796 14804",
    "1 34096 14948",
    "1 35396 15024",
    "1 36696 15092",
    "1 37996 15112",
    "1 39296 15148",
    "1 40596 15188",
    "1 41896 15248",
    "1 43196 15288",
    "1 44496 15368",
    "1 45796 15520",
    "1 47096 15548",
    "1 48396 15592",
    "1 49696 15624",
    "1 50996 15644",
    "1 52296 15728",
    "1 53596 15776",
    "1 54896 15820",
    "1 56196 15964",
    "1 57496 16056",
    "1 58796 16116",
    "1 60096 16132",
    "1 61396 16172",
    "1 62696 16232",
    "1 63996 16288",
    "1 65296 16352",
    "1 1060 16440",
    "1 2360 16556",
    "1 3660 16604",
    "1 4960 16624",
    "1 6260 16672",
    "1 7560 16696",
    "1 8860 16780",
    "1 10160 16840",
    "1 11460 16928",
    "1 12760 17056",
    "1 14060 17096",
    "1 15360 17128",
    "1 16660 17140",
    "1 17960 17184",
    "1 19260 17236",
    "1 20560 17320",
    "1 21860 17380",
    "1 23160 17492",
    "1 24460 17592",
    "1 25760 17652",
    "1 27060 17664",
    "1 28360 17676",
    "1 29660 17720",
    "1 30960 17836",
    "1 32260 17884",
    "1 33560 17984",
    "1 34860 18100",
    "1 36160 18144",
    "1 37460 18188",
    "1 38760 18196",
    "1 40060 18244",
    "1 41360 18324",
    "1 42660 18388",
    "1 43960 18428",
    "1 45260 18604",
    "1 46560 18660",
    "1 47860 18716",
    "1 49160 18756",
    "1 50460 18788",
    "1 51760 18820",
    "1 53060 18860",
    "1 54360 18936",
    "1 55660 19016",
    "1 56960 19152",
    "1 58260 19208",
    "1 59560 19240",
    "1 60860 19260",
    "1 62160 19316",
    "1 63460 19380",
    "1 64760 19416",
    "1 524 19488",
    "1 1824 19656",
    "1 3124 19692",
    "1 4424 19756",
    "1 5724 19808",
    "1 7024 19820",
    "1 8324 19864",
    "1 9624 19928",
    "1 10924 19984",
    "1 12224 20080",
    "1 13524 20184",
    "1 14824 20240",
    "1 16124 20260",
    "1 17424 20268",
    "1 18724 20328",
    "1 20024 20408",
    "1 21324 20480",
    "1 22624 20584",
    "1 23924 20692",
    "1 25224 20744",
    "1 26524 20780",
    "1 27824 20812",
    "1 29124 20828",
    "1 30424 20924",
    "1 31724 20972",
    "1 33024 21044",
    "1 34324 21196",
    "1 35624 21240",
    "1 36924 21288",
    "1 38224 21304",
    "1 39524 21332",
    "1 40824 21400",
    "1 42124 21472",
    "1 43424 21532",
    "1 44724 21680",
    "1 46024 21756",
    "1 47324 21800",
    "1 48624 21824",
    "1 49924 21848",
    "1 51224 21860",
    "1 52524 21960",
    "1 53824 22000",
    "1 55124 22084",
    "1 56424 22248",
    "1 57724 22304",
    "1 59024 22376",
    "1 60324 22396",
    "1 61624 22428",
    "1 62924 22472",
    "1 64224 22512",
    "1 65524 22576",
    "1 1288 22712",
    "1 2588 22796",
    "1 3888 22840",
    "1 5188 22888",
    "1 6488 22932",
    "1 7788 22960",
    "1 9088 23016",
    "1 10388 23076",
    "1 11688 23128",
    "1 12988 23300",
    "1 14288 23344",
    "1 15588 23392",
    "1 16888 23408",
    "1 18188 23460",
    "1 19488 23520",
    "1 20788 23548",
    "1 22088 23632",
    "1 23388 23760",
    "1 24688 23840",
    "1 25988 23876",
    "1 27288 23908",
    "1 28588 23932",
    "1 29888 24000",
    "1 31188 24088",
    "1 32488 24148",
    "1 33788 24296",
    "1 35088 24356",
    "1 36388 24408",
    "1 37688 24428",
    "1 38988 24448",
    "1 40288 24500",
    "1 41588 24572",
    "1 42888 24628",
    "1 44188 24712",
    "1 45488 24856",
    "1 46788 24892",
    "1 48088 24928",
    "1 49388 24952",
    "1 50688 24976",
    "1 51988 25036",
    "1 53288 25112",
    "1 54588 25176",
    "1 55888 25332",
    "1 57188 25404",
    "1 58488 25448",
    "1 59788 25484",
    "1 61088 25484",
    "1 62388 25536",
    "1 63688 25636",
    "1 64988 25688",
    "1 752 25756",
    "1 2052 25920",
    "1 3352 25972",
    "1 4652 26032",
    "1 5952 26076",
    "1 7252 26084",
    "1 8552 26124",
    "1 9852 26184",
    "1 11152 26240",
    "1 12452 26364",
    "1 13752 26452",
    "1 15052 26508",
    "1 16352 26532",
    "1 17652 26556",
    "1 18952 26624",
    "1 20252 26668",
    "1 21552 26720",
    "1 22852 26804",
    "1 24152 26956",
    "1 25452 27016",
    "1 26752 27056",
    "1 28052 27108",
    "1 29352 27124",
    "1 30652 27204",
    "1 31952 27260",
    "1 33252 27308",
    "1 34552 27460",
    "1 35852 27516",
    "1 37152 27552",
    "1 38452 27572",
    "1 39752 27604",
    "1 41052 27700",
    "1 42352 27756",
    "1 43652 27820",
    "1 44952 27964",
    "1 46252 28032",
    "1 47552 28068",
    "1 48852 28096",
    "1 50152 28108",
    "1 51452 28140",
    "1 52752 28240",
    "1 54052 28312",
    "1 55352 28376",
    "1 56652 28516",
    "1 57952 28556",
    "1 59252 28600",
    "1 60552 28620",
    "1 61852 28640",
    "1 63152 28736",
    "1 64452 28804",
    "1 216 28868",
    "1 1516 29032",
    "1 2816 29068",
    "1 4116 29136",
    "1 5416 29148",
    "1 6716 29176",
    "1 8016 29212",
    "1 9316 29288",
    "1 10616 29336",
    "1 11916 29444",
    "1 13216 29584",
    "1 14516 29636",
    "1 15816 29684",
    "1 17116 29708",
    "1 18416 29752",
    "1 19716 29792",
    "1 21016 29848",
    "1 22316 29916",
    "1 23616 30072",
    "1 24916 30132",
    "1 26216 30172",
    "1 27516 30220",
    "1 28816 30256",
    "1 30116 30312",
    "1 31416 30364",
    "1 32716 30424",
    "1 34016 30540",
    "1 35316 30660",
    "1 36616 30712",
    "1 37916 30740",
    "1 39216 30788",
    "1 40516 30820",
    "1 41816 30876",
    "1 43116 30924",
    "1 44416 30992",
    "1 45716 31148",
    "1 47016 31192",
    "1 48316 31228",
    "1 49616 31252",
    "1 50916 31284",
    "1 52216 31368",
    "1 53516 31432",
    "1 54816 31504",
    "1 56116 31644",
    "1 57416 31708",
    "1 58716 31736",
    "1 60016 31764",
    "1 61316 31792",
    "1 62616 31872",
    "1 63916 31928",
    "1 65216 32000",
    "1 980 32116",
    "1 2280 32204",
    "1 3580 32252",
    "1 4880 32276",
    "1 6180 32320",
    "1 7480 32332",
    "1 8780 32436",
    "1 10080 32500",
    "1 11380 32552",
    "1 12680 32716",
    "1 13980 32768",
    "1 15280 32808",
    "1 16580 32828",
    "1 17880 32840",
    "1 19180 32908",
    "1 20480 32980",
    "1 21780 33040",
    "1 23080 33128",
    "1 24380 33276",
    "1 25680 33324",
    "1 26980 33392",
    "1 28280 33424",
    "1 29580 33456",
    "1 30880 33496",
    "1 32180 33548",
    "1 33480 33628",
    "1 34780 33768",
    "1 36080 33832",
    "1 37380 33872",
    "1 38680 33912",
    "1 39980 33944",
    "1 41280 33996",
    "1 42580 34056",
    "1 43880 34100",
    "1 45180 34244",
    "1 46480 34332",
    "1 47780 34384",
    "1 49080 34428",
    "1 50380 34460",
    "1 51680 34516",
    "1 52980 34564",
    "1 54280 34624",
    "1 55580 34692",
    "1 56880 34836",
    "1 58180 34872",
    "1 59480 34908",
    "1 60780 34924",
    "1 62080 34980",
    "1 63380 35080",
    "1 64680 35132",
    "1 444 35216",
    "1 1744 35344",
    "2 834 35332",
    "2 65070 35284",
    "2 63770 35136",
    "2 62470 35072",
    "2 61170 35028",
    "2 59870 35000",
    "2 58570 34976",
    "2 57270 34884",
    "2 55970 34832",
    "2 54670 34772",
    "2 53370 34636",
    "2 52070 34560",
    "2 50770 34508",
    "2 49470 34504",
    "2 48170 34472",
    "2 46870 34432",
    "2 45570 34332",
    "2 44270 34292",
    "2 42970 34188",
    "2 41670 34052",
    "2 40370 34020",
    "2 39070 33972",
    "2 37770 33952",
    "2 36470 33924",
    "2 35170 33840",
    "2 33870 33780",
    "2 32570 33716",
    "2 31270 33544",
    "2 29970 33504",
    "2 28670 33448",
    "2 27370 33440",
    "2 26070 33432",
    "2 24770 33384",
    "2 23470 33280",
    "2 22170 33216",
    "2 20870 33096",
    "2 19570 32964",
    "2 18270 32924",
    "2 16970 32888",
    "2 15670 32848",
    "2 14370 32812",
    "2 13070 32776",
    "2 11770 32700",
    "2 10470 32648",
    "2 9170 32488",
    "2 7870 32436",
    "2 6570 32380",
    "2 5270 32368",
    "2 3970 32320",
    "2 2670 32256",
    "2 1370 32216",
    "2 70 32160",
    "2 64306 32036",
    "2 63006 31928",
    "2 61706 31896",
    "2 60406 31848",
    "2 59106 31812",
    "2 57806 31764",
    "2 56506 31680",
    "2 55206 31656",
    "2 53906 31580",
    "2 52606 31420",
    "2 51306 31376",
    "2 50006 31336",
    "2 48706 31316",
    "2 47406 31244",
    "2 46106 31188",
    "2 44806 31132",
    "2 43506 31076",
    "2 42206 30928",
    "2 40906 30864",
    "2 39606 30828",
    "2 38306 30812",
    "2 37006 30792",
    "2 35706 30748",
    "2 34406 30644",
    "2 33106 30596",
    "2 31806 30488",
    "2 30506 30360",
    "2 29206 30308",
    "2 27906 30284",
    "2 26606 30268",
    "2 25306 30232",
    "2 24006 30132",
    "2 22706 30080",
    "2 21406 30000",
    "2 20106 29856",
    "2 18806 29804",
    "2 17506 29780",
    "2 16206 29744",
    "2 14906 29740",
    "2 13606 29668",
    "2 12306 29588",
    "2 11006 29520",
    "2 9706 29368",
    "2 8406 29280",
    "2 7106 29244",
    "2 5806 29212",
    "2 4506 29196",
    "2 3206 29144",
    "2 1906 29080",
    "2 606 29032",
    "2 64842 28952",
    "2 63542 28796",
    "2 62242 28740",
    "2 60942 28704",
    "2 59642 28664",
    "2 58342 28632",
    "2 57042 28572",
    "2 55742 28516",
    "2 54442 28452",
    "2 53142 28308",
    "2 51842 28240",
    "2 50542 28192",
    "2 49242 28160",
    "2 47942 28120",
    "2 46642 28068",
    "2 45342 28016",
    "2 44042 27956",
    "2 42742 27888",
    "2 41442 27752",
    "2 40142 27696",
    "2 38842 27644",
    "2 37542 27632",
    "2 36242 27584",
    "2 34942 27504",
    "2 33642 27456",
    "2 32342 27380",
    "2 31042 27236",
    "2 29742 27184",
    "2 28442 27152",
    "2 27142 27120",
    "2 25842 27112",
    "2 24542 27024",
    "2 23242 26952",
    "2 21942 26880",
    "2 20642 26712",
    "2 19342 26664",
    "2 18042 26624",
    "2 16742 26596",
    "2 15442 26576",
    "2 14142 26524",
    "2 12842 26448",
    "2 11542 26392",
    "2 10242 26284",
    "2 8942 26168",
    "2 7642 26128",
    "2 6342 26092",
    "2 5042 26092",
    "2 3742 26060",
    "2 2442 25980",
    "2 1142 25912",
    "2 65378 25844",
    "2 64078 25680",
    "2 62778 25608",
    "2 61478 25572",
    "2 60178 25524",
    "2 58878 25500",
    "2 57578 25468",
    "2 56278 25404",
    "2 54978 25356",
    "2 53678 25256",
    "2 52378 25112",
    "2 51078 25060",
    "2 49778 25036",
    "2 48478 24992",
    "2 47178 24948",
    "2 45878 24888",
    "2 44578 24844",
    "2 43278 24772",
    "2 41978 24628",
    "2 40678 24564",
    "2 39378 24532",
    "2 38078 24488",
    "2 36778 24464",
    "2 35478 24404",
    "2 34178 24336",
    "2 32878 24280",
    "2 31578 24208",
    "2 30278 24076",
    "2 28978 24020",
    "2 27678 24004",
    "2 26378 23964",
    "2 25078 23880",
    "2 23778 23824",
    "2 22478 23780",
    "2 21178 23676",
    "2 19878 23552",
    "2 18578 23504",
    "2 17278 23480",
    "2 15978 23460",
    "2 14678 23444",
    "2 13378 23344",
    "2 12078 23292",
    "2 10778 23212",
    "2 9478 23060",
    "2 8178 23008",
    "2 6878 22984",
    "2 5578 22968",
    "2 4278 22928",
    "2 2978 22864",
    "2 1678 22788",
    "2 378 22736",
    "2 64614 22628",
    "2 63314 22516",
    "2 62014 22472",
    "2 60714 22444",
    "2 59414 22416",
    "2 58114 22412",
    "2 56814 22304",
    "2 55514 22240",
    "2 54214 22176",
    "2 52914 21996",
    "2 51614 21948",
    "2 50314 21896",
    "2 49014 21884",
    "2 47714 21844",
    "2 46414 21788",
    "2 45114 21748",
    "2 43814 21688",
    "2 42514 21584",
    "2 41214 21472",
    "2 39914 21420",
    "2 38614 21376",
    "2 37314 21348",
    "2 36014 21296",
    "2 34714 21236",
    "2 33414 21184",
    "2 32114 21120",
    "2 30814 20968",
    "2 29514 20924",
    "2 28214 20872",
    "2 26914 20860",
    "2 25614 20804",
    "2 24314 20728",
    "2 23014 20680",
    "2 21714 20620",
    "2 20414 20488",
    "2 19114 20412",
    "2 17814 20364",
    "2 16514 20336",
    "2 15214 20280",
    "2 13914 20236",
    "2 12614 20172",
    "2 11314 20108",
    "2 10014 19988",
    "2 8714 19908",
    "2 7414 19856",
    "2 6114 19860",
    "2 4814 19832",
    "2 3514 19800",
    "2 2214 19700",
    "2 914 19644",
    "2 65150 19576",
    "2 63850 19412",
    "2 62550 19364",
    "2 61250 19320",
    "2 59950 19300",
    "2 58650 19272",
    "2 57350 19236",
    "2 56050 19140",
    "2 54750 19072",
    "2 53450 18948",
    "2 52150 18872",
    "2 50850 18824",
    "2 49550 18808",
    "2 48250 18800",
    "2 46950 18748",
    "2 45650 18644",
    "2 44350 18588",
    "2 43050 18516",
    "2 41750 18364",
    "2 40450 18320",
    "2 39150 18264",
    "2 37850 18248",
    "2 36550 18220",
    "2 35250 18148",
    "2 33950 18104",
    "2 32650 18056",
    "2 31350 17944",
    "2 30050 17816",
    "2 28750 17760",
    "2 27450 17744",
    "2 26150 17692",
    "2 24850 17636",
    "2 23550 17592",
    "2 22250 17528",
    "2 20950 17432",
    "2 19650 17320",
    "2 18350 17276",
    "2 17050 17240",
    "2 15750 17192",
    "2 14450 17168",
    "2 13150 17104",
    "2 11850 17036",
    "2 10550 16976",
    "2 9250 16832",
    "2 7950 16780",
    "2 6650 16728",
    "2 5350 16724",
    "2 4050 16692",
    "2 2750 16612",
    "2 1450 16536",
    "2 150 16500",
    "2 64386 16360",
    "2 63086 16284",
    "2 61786 16236",
    "2 60486 16216",
    "2 59186 16192",
    "2 57886 16156",
    "2 56586 16060",
    "2 55286 15988",
    "2 53986 15908",
    "2 52686 15768",
    "2 51386 15724",
    "2 50086 15688",
    "2 48786 15672",
    "2 47486 15644",
    "2 46186 15564",
    "2 44886 15512",
    "2 43586 15432",
    "2 42286 15284",
    "2 40986 15232",
    "2 39686 15196",
    "2 38386 15164",
    "2 37086 15152",
    "2 35786 15124",
    "2 34486 15020",
    "2 33186 14960",
    "2 31886 14872",
    "2 30586 14728",
    "2 29286 14680",
    "2 27986 14640",
    "2 26686 14628",
    "2 25386 14572",
    "2 24086 14504",
    "2 22786 14460",
    "2 21486 14400",
    "2 20186 14236",
    "2 18886 14172",
    "2 17586 14124",
    "2 16286 14084",
    "2 14986 14048",
    "2 13686 14008",
    "2 12386 13960",
    "2 11086 13892",
    "2 9786 13780",
    "2 8486 13688",
    "2 7186 13648",
    "2 5886 13620",
    "2 4586 13588",
    "2 3286 13540",
    "2 1986 13476",
    "2 686 13424",
    "2 64922 13360",
    "2 63622 13216",
    "2 62322 13144",
    "2 61022 13112",
    "2 59722 13088",
    "2 58422 13048",
    "2 57122 12972",
    "2 55822 12916",
    "2 54522 12856",
    "2 53222 12680",
    "2 51922 12640",
    "2 50622 12616",
    "2 49322 12592",
    "2 48022 12568",
    "2 46722 12512",
    "2 45422 12432",
    "2 44122 12384",
    "2 42822 12272",
    "2 41522 12156",
    "2 40222 12100",
    "2 38922 12080",
    "2 37622 12060",
    "2 36322 12020",
    "2 35022 11948",
    "2 33722 11888",
    "2 32422 11824",
    "2 31122 11648",
    "2 29822 11608",
    "2 28522 11584",
    "2 27222 11560",
    "2 25922 11556",
    "2 24622 11476",
    "2 23322 11396",
    "2 22022 11348",
    "2 20722 11180",
    "2 19422 11088",
    "2 18122 11032",
    "2 16822 11004",
    "2 15522 10984",
    "2 14222 10944",
    "2 12922 10884",
    "2 11622 10824",
    "2 10322 10764",
    "2 9022 10628",
    "2 7722 10572",
    "2 6422 10520",
    "2 5122 10504",
    "2 3822 10452",
    "2 2522 10392",
    "2 1222 10340",
    "2 65458 10292",
    "2 64158 10152",
    "2 62858 10080",
    "2 61558 10028",
    "2 60258 9988",
    "2 58958 9948",
    "2 57658 9916",
    "2 56358 9844",
    "2 55058 9804",
    "2 53758 9724",
    "2 52458 9588",
    "2 51158 9540",
    "2 49858 9488",
    "2 48558 9460",
    "2 47258 9404",
    "2 45958 9360",
    "2 44658 9308",
    "2 43358 9244",
    "2 42058 9080",
    "2 40758 9044",
    "2 39458 9004",
    "2 38158 8980",
    "2 36858 8960",
    "2 35558 8908",
    "2 34258 8828",
    "2 32958 8768",
    "2 31658 8628",
    "2 30358 8536",
    "2 29058 8496",
    "2 27758 8472",
    "2 26458 8452",
    "2 25158 8400",
    "2 23858 8312",
    "2 22558 8256",
    "2 21258 8172",
    "2 19958 8044",
    "2 18658 8000",
    "2 17358 7952",
    "2 16058 7944",
    "2 14758 7932",
    "2 13458 7836",
    "2 12158 7784",
    "2 10858 7700",
    "2 9558 7532",
    "2 8258 7496",
    "2 6958 7432",
    "2 5658 7420",
    "2 4358 7380",
    "2 3058 7344",
    "2 1758 7264",
    "2 458 7240",
    "2 64694 7160",
    "2 63394 7012",
    "2 62094 6944",
    "2 60794 6908",
    "2 59494 6856",
    "2 58194 6828",
    "2 56894 6776",
    "2 55594 6712",
    "2 54294 6648",
    "2 52994 6496",
    "2 51694 6440",
    "2 50394 6396",
    "2 49094 6372",
    "2 47794 6324",
    "2 46494 6288",
    "2 45194 6236",
    "2 43894 6180",
    "2 42594 6092",
    "2 41294 5968",
    "2 39994 5924",
    "2 38694 5884",
    "2 37394 5836",
    "2 36094 5800",
    "2 34794 5728",
    "2 33494 5672",
    "2 32194 5596",
    "2 30894 5468",
    "2 29594 5412",
    "2 28294 5388",
    "2 26994 5380",
    "2 25694 5324",
    "2 24394 5244",
    "2 23094 5188",
    "2 21794 5108",
    "2 20494 4948",
    "2 19194 4904",
    "2 17894 4860",
    "2 16594 4832",
    "2 15294 4800",
    "2 13994 4744",
    "2 12694 4688",
    "2 11394 4632",
    "2 10094 4512",
    "2 8794 4420",
    "2 7494 4364",
    "2 6194 4328",
    "2 4894 4320",
    "2 3594 4300",
    "2 2294 4196",
    "2 994 4140",
    "2 65230 4088",
    "2 63930 3900",
    "2 62630 3852",
    "2 61330 3804",
    "2 60030 3768",
    "2 58730 3740",
    "2 57430 3692",
    "2 56130 3632",
    "2 54830 3584",
    "2 53530 3472",
    "2 52230 3360",
    "2 50930 3296",
    "2 49630 3248",
    "2 48330 3224",
    "2 47030 3176",
    "2 45730 3120",
    "2 44430 3088",
    "2 43130 3000",
    "2 41830 2864",
    "2 40530 2808",
    "2 39230 2780",
    "2 37930 2724",
    "2 36630 2700",
    "2 35330 2660",
    "2 34030 2584",
    "2 32730 2528",
    "2 31430 2432",
    "2 30130 2328",
    "2 28830 2268",
    "2 27530 2240",
    "2 26230 2200",
    "2 24930 2136",
    "2 23630 2076",
    "2 22330 2016",
    "2 21030 1884",
    "2 19730 1808",
    "2 18430 1760",
    "2 17130 1724",
    "2 15830 1712",
    "2 14530 1664",
    "2 13230 1580",
    "2 11930 1536",
    "2 10630 1448",
    "2 9330 1316",
    "2 8030 1252",
    "2 6730 1220",
    "2 5430 1196",
    "2 4130 1160",
    "2 2830 1112",
    "2 1530 1032",
    "2 230 968",
    "2 64466 852",
    "2 63166 772",
    "2 61866 728",
    "2 60566 680",
    "2 59266 672",
    "2 57966 632",
    "2 56666 540",
    "2 55366 488",
    "2 54066 384",
    "2 52766 232",
    "2 51466 196",
    "2 50166 128",
    "2 48866 132",
    "2 47566 60",
    "2 46266 36",
    "2 44966 65520",
    "2 43666 65456",
    "2 42366 65336",
    "2 41066 65252",
    "2 39766 65188",
    "2 38466 65144",
    "2 37166 65104",
    "2 35866 65060",
    "2 34566 65020",
    "2 33266 64968",
    "2 31966 64888",
    "2 30666 64752",
    "2 29366 64688",
    "2 28066 64640",
    "2 26766 64628",
    "2 25466 64576",
    "2 24166 64504",
    "2 22866 64456",
    "2 21566 64388",
    "2 20266 64236",
    "2 18966 64180",
    "2 17666 64132",
    "2 16366 64088",
    "2 15066 64060",
    "2 13766 63996",
    "2 12466 63948",
    "2 11166 63896",
    "2 9866 63744",
    "2 8566 63684",
    "2 7266 63648",
    "2 5966 63620",
    "2 4666 63608",
    "2 3366 63556",
    "2 2066 63472",
    "2 766 63396",
    "2 65002 63308",
    "2 63702 63180",
    "2 62402 63136",
    "2 61102 63088",
    "2 59802 63060",
    "2 58502 63048",
    "2 57202 62952",
    "2 55902 62892",
    "2 54602 62840",
    "2 53302 62660",
    "2 52002 62616",
    "2 50702 62576",
    "2 49402 62572",
    "2 48102 62540",
    "2 46802 62484",
    "2 45502 62412",
    "2 44202 62356",
    "2 42902 62240",
    "2 41602 62116",
    "2 40302 62068",
    "2 39002 62024",
    "2 37702 61992",
    "2 36402 61956",
    "2 35102 61924",
    "2 33802 61856",
    "2 32502 61804",
    "2 31202 61656",
    "2 29902 61568",
    "2 28602 61516",
    "2 27302 61508",
    "2 26002 61440",
    "2 24702 61400",
    "2 23402 61328",
    "2 22102 61280",
    "2 20802 61168",
    "2 19502 61072",
    "2 18202 61020",
    "2 16902 60980",
    "2 15602 60924",
    "2 14302 60900",
    "2 13002 60848",
    "2 11702 60784",
    "2 10402 60728",
    "2 9102 60580",
    "2 7802 60512",
    "2 6502 60476",
    "2 5202 60456",
    "2 3902 60396",
    "2 2602 60340",
    "2 1302 60288",
    "2 2 60224",
    "2 64238 60056",
    "2 62938 60032",
    "2 61638 59972",
    "2 60338 59940",
    "2 59038 59912",
    "2 57738 59876",
    "2 56438 59792",
    "2 55138 59728",
    "2 53838 59608",
    "2 52538 59512",
    "2 51238 59452",
    "2 49938 59424",
    "2 48638 59428",
    "2 47338 59368",
    "2 46038 59292",
    "2 44738 59236",
    "2 43438 59172",
    "2 42138 59020",
    "2 40838 58972",
    "2 39538 58936",
    "2 38238 58916",
    "2 36938 58912",
    "2 35638 58864",
    "2 34338 58772",
    "2 33038 58716",
    "2 31738 58588",
    "2 30438 58464",
    "2 29138 58396",
    "2 27838 58372",
    "2 26538 58344",
    "2 25238 58304",
    "2 23938 58248",
    "2 22638 58188",
    "2 21338 58112",
    "2 20038 57964",
    "2 18738 57896",
    "2 17438 57840",
    "2 16138 57804",
    "2 14838 57788",
    "2 13538 57724",
    "2 12238 57688",
    "2 10938 57624",
    "2 9638 57472",
    "2 8338 57404",
    "2 7038 57364",
    "2 5738 57332",
    "2 4438 57292",
    "2 3138 57240",
    "2 1838 57188",
    "2 538 57152",
    "2 64774 57068",
    "2 63474 56940",
    "2 62174 56872",
    "2 60874 56828",
    "2 59574 56788",
    "2 58274 56740",
    "2 56974 56680",
    "2 55674 56628",
    "2 54374 56556",
    "2 53074 56416",
    "2 51774 56364",
    "2 50474 56312",
    "2 49174 56304",
    "2 47874 56272",
    "2 46574 56200",
    "2 45274 56160",
    "2 43974 56084",
    "2 42674 55940",
    "2 41374 55872",
    "2 40074 55836",
    "2 38774 55796",
    "2 37474 55772",
    "2 36174 55732",
    "2 34874 55672",
    "2 33574 55588",
    "2 32274 55520",
    "2 30974 55380",
    "2 29674 55328",
    "2 28374 55292",
    "2 27074 55272",
    "2 25774 55252",
    "2 24474 55172",
    "2 23174 55104",
    "2 21874 55036",
    "2 20574 54860",
    "2 19274 54808",
    "2 17974 54748",
    "2 16674 54720",
    "2 15374 54684",
    "2 14074 54648",
    "2 12774 54580",
    "2 11474 54544",
    "2 10174 54452",
    "2 8874 54324",
    "2 7574 54252",
    "2 6274 54228",
    "2 4974 54188",
    "2 3674 54144",
    "2 2374 54092",
    "2 1074 54048",
    "2 65310 53992",
    "2 64010 53832",
    "2 62710 53764",
    "2 61410 53716",
    "2 60110 53684",
    "2 58810 53652",
    "2 57510 53608",
    "2 56210 53544",
    "2 54910 53496",
    "2 53610 53404",
    "2 52310 53284",
    "2 51010 53228",
    "2 49710 53180",
    "2 48410 53148",
    "2 47110 53096",
    "2 45810 53032",
    "2 44510 52980",
    "2 43210 52900",
    "2 41910 52784",
    "2 40610 52732",
    "2 39310 52688",
    "2 38010 52680",
    "2 36710 52648",
    "2 35410 52584",
    "2 34110 52516",
    "2 32810 52444",
    "2 31510 52288",
    "2 30210 52228",
    "2 28910 52172",
    "2 27610 52160",
    "2 26310 52140",
    "2 25010 52068",
    "2 23710 52000",
    "2 22410 51948",
    "2 21110 51828",
    "2 19810 51732",
    "2 18510 51676",
    "2 17210 51648",
    "2 15910 51628",
    "2 14610 51600",
    "2 13310 51524",
    "2 12010 51452",
    "2 10710 51376",
    "2 9410 51224",
    "2 8110 51148",
    "2 6810 51108",
    "2 5510 51100",
    "2 4210 51064",
    "2 2910 51016",
    "2 1610 50948",
    "2 310 50904",
    "2 64546 50816",
    "2 63246 50688",
    "2 61946 50632",
    "2 60646 50588",
    "2 59346 50532",
    "2 58046 50508",
    "2 56746 50452",
    "2 55446 50412",
    "2 54146 50336",
    "2 52846 50176",
    "2 51546 50116",
    "2 50246 50068",
    "2 48946 50060",
    "2 47646 50012",
    "2 46346 49968",
    "2 45046 49900",
    "2 43746 49852",
    "2 42446 49752",
    "2 41146 49636",
    "2 39846 49588",
    "2 38546 49560",
    "2 37246 49520",
    "2 35946 49472",
    "2 34646 49408",
    "2 33346 49356",
    "2 32046 49280",
    "2 30746 49144",
    "2 29446 49092",
    "2 28146 49056",
    "2 26846 49048",
    "2 25546 49012",
    "2 24246 48916",
    "2 22946 48860",
    "2 21646 48780",
    "2 20346 48624",
    "2 19046 48580",
    "2 17746 48532",
    "2 16446 48492",
    "2 15146 48488",
    "2 13846 48420",
    "2 12546 48368",
    "2 11246 48296",
    "2 9946 48160",
    "2 8646 48076",
    "2 7346 48036",
    "2 6046 48028",
    "2 4746 48004",
    "2 3446 47972",
    "2 2146 47872",
    "2 846 47820",
    "2 65082 47748",
    "2 63782 47576",
    "2 62482 47524",
    "2 61182 47480",
    "2 59882 47452",
    "2 58582 47436",
    "2 57282 47372",
    "2 55982 47316",
    "2 54682 47260",
    "2 53382 47144",
    "2 52082 47040",
    "2 50782 46980",
    "2 49482 46948",
    "2 48182 46896",
    "2 46882 46860",
    "2 45582 46812",
    "2 44282 46756",
    "2 42982 46700",
    "2 41682 46556",
    "2 40382 46488",
    "2 39082 46444",
    "2 37782 46420",
    "2 36482 46392",
    "2 35182 46336",
    "2 33882 46284",
    "2 32582 46220",
    "2 31282 46096",
    "2 29982 46000",
    "2 28682 45956",
    "2 27382 45936",
    "2 26082 45888",
    "2 24782 45820",
    "2 23482 45756",
    "2 22182 45708",
    "2 20882 45572",
    "2 19582 45492",
    "2 18282 45448",
    "2 16982 45416",
    "2 15682 45376",
    "2 14382 45348",
    "2 13082 45272",
    "2 11782 45208",
    "2 10482 45108",
    "2 9182 44996",
    "2 7882 44932",
    "2 6582 44904",
    "2 5282 44872",
    "2 3982 44864",
    "2 2682 44792",
    "2 1382 44724",
    "2 82 44664",
    "2 64318 44528",
    "2 63018 44452",
    "2 61718 44408",
    "2 60418 44384",
    "2 59118 44364",
    "2 57818 44328",
    "2 56518 44244",
    "2 55218 44160",
    "2 53918 44080",
    "2 52618 43936",
    "2 51318 43884",
    "2 50018 43844",
    "2 48718 43820",
    "2 47418 43788",
    "2 46118 43740",
    "2 44818 43680",
    "2 43518 43620",
    "2 42218 43472",
    "2 40918 43404",
    "2 39618 43360",
    "2 38318 43316",
    "2 37018 43260",
    "2 35718 43224",
    "2 34418 43184",
    "2 33118 43124",
    "2 31818 43040",
    "2 30518 42900",
    "2 29218 42860",
    "2 27918 42816",
    "2 26618 42788",
    "2 25318 42732",
    "2 24018 42676",
    "2 22718 42624",
    "2 21418 42568",
    "2 20118 42404",
    "2 18818 42352",
    "2 17518 42296",
    "2 16218 42260",
    "2 14918 42228",
    "2 13618 42172",
    "2 12318 42120",
    "2 11018 42044",
    "2 9718 41916",
    "2 8418 41852",
    "2 7118 41824",
    "2 5818 41788",
    "2 4518 41780",
    "2 3218 41720",
    "2 1918 41624",
    "2 618 41576",
    "2 64854 41472",
    "2 63554 41344",
    "2 62254 41304",
    "2 60954 41272",
    "2 59654 41244",
    "2 58354 41204",
    "2 57054 41140",
    "2 55754 41084",
    "2 54454 41012",
    "2 53154 40852",
    "2 51854 40800",
    "2 50554 40772",
    "2 49254 40752",
    "2 47954 40736",
    "2 46654 40684",
    "2 45354 40596",
    "2 44054 40536",
    "2 42754 40424",
    "2 41454 40308",
    "2 40154 40256",
    "2 38854 40208",
    "2 37554 40184",
    "2 36254 40164",
    "2 34954 40116",
    "2 33654 40056",
    "2 32354 40000",
    "2 31054 39836",
    "2 29754 39764",
    "2 28454 39708",
    "2 27154 39696",
    "2 25854 39628",
    "2 24554 39584",
    "2 23254 39532",
    "2 21954 39468",
    "2 20654 39320",
    "2 19354 39248",
    "2 18054 39216",
    "2 16754 39152",
    "2 15454 39108",
    "2 14154 39092",
    "2 12854 39036",
    "2 11554 38988",
    "2 10254 38920",
    "2 8954 38780",
    "2 7654 38728",
    "2 6354 38684",
    "2 5054 38664",
    "2 3754 38608",
    "2 2454 38544",
    "2 1154 38492",
    "2 65390 38416",
    "2 64090 38268",
    "2 62790 38228",
    "2 61490 38180",
    "2 60190 38152",
    "2 58890 38140",
    "2 57590 38076",
    "2 56290 37984",
    "2 54990 37928",
    "2 53690 37796",
    "2 52390 37716",
    "2 51090 37672",
    "2 49790 37632",
    "2 48490 37608",
    "2 47190 37552",
    "2 45890 37492",
    "2 44590 37436",
    "2 43290 37364",
    "2 41990 37220",
    "2 40690 37172",
    "2 39390 37128",
    "2 38090 37112",
    "2 36790 37092",
    "2 35490 37044",
    "2 34190 36952",
    "2 32890 36892",
    "2 31590 36744",
    "2 30290 36656",
    "2 28990 36596",
    "2 27690 36560",
    "2 26390 36540",
    "2 25090 36476",
    "2 23790 36428",
    "2 22490 36372",
    "2 21190 36304",
    "2 19890 36140",
    "2 18590 36088",
    "2 17290 36040",
    "2 15990 35960",
    "2 14690 35960",
    "2 13390 35908",
    "2 12090 35872",
    "2 10790 35800",
    "2 9490 35652",
    "2 8190 35608",
    "2 6890 35540",
    "2 5590 35520",
    "2 4290 35484",
    "2 2990 35420",
    "2 1690 35368",
    "CAL done",
  };

  const auto result = moteus::tool::Calibrate(data);
  BOOST_TEST(result.total_phase == 1376700);
  BOOST_TEST(result.total_delta == 65548);
  BOOST_TEST(result.poles == 42);
  BOOST_TEST(result.ratio == 21.00293);
  BOOST_TEST(result.invert == false);

  std::vector<double> expected_offsets = {
    -1.7985491034584755,
    -1.811379523626072,
    -1.805294180172147,
    -1.8011223623091335,
    -1.807226668197666,
    -1.8029352927082516,
    -1.7932796556312116,
    -1.7797599487653086,
    -1.7763179147431267,
    -1.7561483998999698,
    -1.7227260889874958,
    -1.7135130515648829,
    -1.7046370416419527,
    -1.6715716469173532,
    -1.6534517027123297,
    -1.653710453208362,
    -1.6403659479214125,
    -1.6229389533231828,
    -1.629660804139761,
    -1.6307848492960184,
    -1.6135349333001374,
    -1.6110455582675214,
    -1.618682394825924,
    -1.6194285680078329,
    -1.6199676038188695,
    -1.6308793698175759,
    -1.6487018679545675,
    -1.6626120570908753,
    -1.664101657905835,
    -1.695620211247407,
    -1.7215804898467946,
    -1.732217752784327,
    -1.7591219920303545,
    -1.7985475441932104,
    -1.8081746488602755,
    -1.8043643310353237,
    -1.8457340269540694,
    -1.8565382835143216,
    -1.8458403622088155,
    -1.8496352500183963,
    -1.8567334516602416,
    -1.8388430830055027,
    -1.8348447670388945,
    -1.8329196242288521,
    -1.8228708075750457,
    -1.818580325792709,
    -1.8028937439828128,
    -1.8001108514437596,
    -1.800688208771548,
    -1.7865153609935356,
    -1.7783243117692515,
    -1.7892805737149349,
    -1.7734464815457902,
    -1.7449761053783621,
    -1.764431847900115,
    -1.759651832691018,
    -1.7362442081462683,
    -1.7547102288692433,
    -1.7663183257060477,
    -1.74643578589175,
    -1.7560638706530516,
    -1.7754112919830285,
    -1.7729037660508848,
    -1.7776885300849505,
  };

  BOOST_TEST(result.offset == expected_offsets,
             boost::test_tools::per_element());
}
